package model;
import java.util.Observable;

/**
 * @author Juan Marchese (juan.marchese@fdvsolutions.com)
 *         Date: 8/06/12
 *         Time: 16:42
 */
public abstract class Movible extends Observable{

    private ElemEscenario posicion;
    private ElemEscenario posicionAnterior;
    private int turnoIncioMovimiento;
    private Temporizador temporizador;

    public abstract int getVelocidad();

    public ElemEscenario getPosicion() {
        return posicion;
    }

    public void setPosicion(ElemEscenario posicion) {
        this.posicion = posicion;
    }

    public ElemEscenario getPosicionAnterior() {
        return posicionAnterior;
    }

    public void setPosicionAnterior(ElemEscenario posicionAnterior) {
        this.posicionAnterior = posicionAnterior;
    }

    public int getTurnoIncioMovimiento() {
        return turnoIncioMovimiento;
    }

    public void setTurnoIncioMovimiento(int turnoIncioMovimiento) {
        this.turnoIncioMovimiento = turnoIncioMovimiento;
    }

    public void iniciarTemporizador(int tiempo) {
        if (temporizador != null){
            temporizador.cancel();
        }
        this.temporizador = new Temporizador(this);
        temporizador.temporizar(tiempo);
    }

    abstract boolean mover(ElemEscenario elemEscenario);

    abstract boolean volverAestadoAnterior();
}
